﻿#ifndef _PT_LINE_H__
#define _PT_LINE_H__

#ifdef	__cplusplus
extern "C" {
#endif

#include "dataproc.h"
#include "correct.h"
#include "str_ext.h"
#include "search_ext.h"

typedef struct
{
	i16_data_reamap_type* map;	// Y值-点映射表
	uint8_t map_len;			// Y映射表长度
	int16_t dots;				// Y每行点数
	int16_t dots_offset;		// Y坐标值数值偏移
	int16_t dot_site_old;		// X上次目标点位置
	char axis_cnt;				// X计数器 用于打印坐标轴
	char axis_dots;				// Y坐标轴点周期
	char cut_line_dots;			// Y分割线点间隔	
	char axis_en;				// Y是否打印坐标轴
	char out_lmt_en;			// Y是否打印超出边界
} pl_ctr_type;


/*****************************************************************************
* @brief   pl_u8_cal	：根据输入值生成曲线数据表
* @param   ctr			：控制对象
* @param   val			：数值
* @param   buff			：点缓存
* @param   cut_line_en	：是否生成分割线
* @return  长度
*****************************************************************************/
int16_t pl_u8_cal(pl_ctr_type * ctr, int16_t val, void *buff, char cut_line_en);

/*****************************************************************************
* @brief   pl_u8_add：曲线数据表合并
* @param   src		: 源数据
* @param   src_len	: 源数据长度
* @param   add		: 增量数据
* @param   add_len	: 增量长度
* @return  len 		：叠加后的总长度
*****************************************************************************/
int16_t pl_u8_add(void *src, int16_t src_len, void *add, int16_t add_len);

/*****************************************************************************
* @brief   pl_u8_get_line_from_lcd_xh：取一行线到曲线数据表
* @param   buff		: 线数据缓存
* @param   line_num	: 第几行
* @param   line_size: 行点数
* @param   img		: 图像
* @param   xsize	: 图像行点数，必须为8的倍数
* @return  len 		：线数据长度
*****************************************************************************/
int16_t pl_u8_get_line_from_lcd_xh( 
	void *buff, 
	int16_t line_num, 
	int16_t line_size, 
	void *img, 
	int16_t xsize);

/*****************************************************************************
* @brief   pl_u8_get_line_from_lcd_yl：取一行线到曲线数据表
* @param   buff		: 线数据缓存
* @param   line_num	: 第几行
* @param   line_size: 行点数
* @param   img		: 图像
* @param   xsize	: 图像行点数，必须为8的倍数
* @return  len 		：线数据长度
*****************************************************************************/
int16_t pl_u8_get_line_from_lcd_yl( 
	void *buff, 
	int16_t line_num, 
	int16_t line_size, 
	void *img, 
	int16_t xsize);

	
/*****************************************************************************
* @brief   pl_u16_cal
* @param   ctr			：控制对象
* @param   val			：数值
* @param   buff			：点缓存
* @param   cut_line_en	：是否生成分割线
* @return  长度
*****************************************************************************/
int16_t pl_u16_cal(pl_ctr_type * ctr, int16_t val, void *buff, char cut_line_en);	
	
/*****************************************************************************
* @brief   pl_u16_add
* @param   src		: 源数据
* @param   src_len	: 源数据长度
* @param   add		: 增量数据
* @param   add_len	: 增量长度
* @return  len 		：叠加后的总长度
*****************************************************************************/
int16_t pl_u16_add(void *src, int16_t src_len, void *add, int16_t add_len);

/*****************************************************************************
* @brief   pl_u16_get_line_from_lcd_xh
* @param   buff		: 线数据缓存
* @param   line_num	: 第几行
* @param   line_size: 行点数
* @param   img		: 图像
* @param   xsize	: 图像行点数，必须为8的倍数
* @return  len 		：线数据长度
*****************************************************************************/
int16_t pl_u16_get_line_from_lcd_xh( 
	void *buff, 
	int16_t line_num, 
	int16_t line_size, 
	void *img, 
	int16_t xsize);
	
/*****************************************************************************
* @brief   pl_u16_get_line_from_lcd_yl
* @param   buff		: 线数据缓存
* @param   line_num	: 第几行
* @param   line_size: 行点数
* @param   img		: 图像
* @param   xsize	: 图像行点数，必须为8的倍数
* @return  len 		：线数据长度
*****************************************************************************/
int16_t pl_u16_get_line_from_lcd_yl( 
	void *buff, 
	int16_t line_num, 
	int16_t line_size, 
	void *img, 
	int16_t xsize);
	
	
#ifdef	__cplusplus
}
#endif

#endif

